﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QListWidgetItem>
#include <QHBoxLayout>  //水平布局
#include <QVBoxLayout>  //垂直布局
#include <QTabWidget>   //标签页容器
#include <QListWidget>  //列表控件（显示服饰图标）
#include <QGraphicsScene> //图形场景(承载图形项)
#include <QGraphicsView> //图形视图（展示搭配效果）
#include <QPushButton>  //按钮控件
#include <QCheckBox>    //复选框（主题切换）
#include <QList>        //动态列表（存储服饰信息）
#include <QPixmap>      //图片处理类
#include <QGraphicsPixmapItem> //提供图像显示类
#include <QMap> //提供关联容器类


//QT_BEGIN_NAMESPACE
//namespace Ui { class MainWindow; }
//QT_END_NAMESPACE

struct ClothesInfo//服饰信息结构体
{
    QString name; //服饰名称
    QString path; //资源路径
    QString category; //类别（上衣，下衣，连衣裙，鞋子）
    QPoint offset; //服饰相对于角色的偏移量
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr); //构造函数
    ~MainWindow(); //析构函数

//private:
//    Ui::MainWindow *ui;

private:
    //中间展示区的图形视图和场景
    QGraphicsView *m_view; //图形视图，用于显示场景内容
    QGraphicsScene *m_scene;   // 图形场景，用于管理所有图形项

    //左侧标签页的列表控件（分别对应四类服饰）
    QListWidget *m_upcloList; //上衣列表
    QListWidget *m_downcloList; //裤子列表
    QListWidget *m_shoesList; //鞋子列表
    QListWidget *m_dressList; //连衣裙列表

    //右侧功能按钮
    QPushButton *m_scene1Btn; //场景一
    QPushButton *m_scene2Btn; //场景二
    QPushButton *m_saveBtn;  //保存按钮
    QPushButton *m_resetBtn; // 重置按钮
    QPushButton *m_randomBtn; //随机按钮（一键生成搭配）
    QCheckBox *m_themeCheckBox; //主题切换复选框（应用的深色和浅色）、

    //存储所有服饰信息的列表
    QList<ClothesInfo> m_clothesList;

    //存储当前场景中的图形项
    QGraphicsPixmapItem *m_sceneItem; //场景背景
    QGraphicsPixmapItem *m_upcloItem; //当前上衣
    QGraphicsPixmapItem *m_downcloItem; //当前裤子
    QGraphicsPixmapItem *m_dressItem; //当前连衣裙
    QGraphicsPixmapItem *m_shoesItem; //当前鞋子


    //私有成员函数声明
    void loadClothes(); //加载服饰资源
    void initUI(); //初始化界面布局
    void initConnections();//初始化信号槽连接
    void clearCurrentClothes();//清除当前搭配的服饰
    void addClothesToScene(const ClothesInfo &info); //添加服饰到场场景
    ClothesInfo getClothesInfoByName(const QString &name);//根据名称获取服饰信息

 private slots:
    //列表项点击事件处理
    void onUpListItemClicked(QListWidgetItem* item);
    void onDownListItemClicked(QListWidgetItem* item);
    void onShoesListItemClicked(QListWidgetItem* item);
    void onDressListItemClicked(QListWidgetItem *item);

    //按钮点击事件处理
    void onScene1BtnClicked();
    void onScene2BtnClicked();
    void onSaveBtnClicked();
    void onResetBtnClicked();
    void onRandomBtnClicked();

    //主题切换事件处理
    void onThemeCheckBoxToggled(bool checked);


};
#endif // MAINWINDOW_H







